var DOMBrowser = function(){
	/** @function DOMBrowser 
		@description objet de mapping du DOM
		@return object 
			
			DOM_Map = {
				ids : [...], // tableau d'elm possedant un id,
				div : {
					block : [...], // tableau contenant les div.block
					blockShadow : [...], // tableau contenant les div.blockShadow
					...
				},
				
				span : {
					bold : [...], // tableau contenant les span.bold
					blockShadow : [...], // tableau contenant les div.blockShadow
					...
				},
				...
			}
	*/
	DOM_Map = {
		ids: []
	};
	
	//
	var all = document.all || document.body.getElementsByTagName("*");
	var i=0, l=all.length;
	var el, tag, klass;
	
	// cree et/ou renvoie l'objet DOM_Map.div
	var pushTag = function (tag){
		if(!DOM_Map[tag]) DOM_Map[tag] = {};
		return DOM_Map[tag];
	}
	
	var pushElm = function (oTag, elm){
		var klasses = elm.className.split(' ');
		var j=0, k=klasses.length, klass;
		for(;j<k;j++){
			klass = klasses[j];
			if(!oTag[klass]) oTag[klass] = [];
			oTag[klass].push(elm);
		}
	}
	
	var pushId = function (elm){
		var id = "#" + elm.id;
		DOM_Map.ids[id] = elm;	
	}
	
	//trace.time('DOM_Map')
	for(;i<l;i++){
		el = all[i];
		if (el.id || el.getAttribute("id")) pushId(el);
		tag = pushTag(el.tagName.toLowerCase());
		pushElm(tag, el);
	}
	//trace.timeEnd('DOM_Map')
	return DOM_Map;
};